#ifndef CAMERA_H
#define CAMERA_H
#include <opencv2/opencv.hpp>
#include <iostream>
#include <QTimer>

#include <Driver/RMVideoCapture.hpp>
//使用V4L2获取相机数据帧

//使用opencv
//#define USE_OPENCV
//使用V4L2
#define USE_V4L2

class Camera : public RMVideoCapture
{
public:
    /** @brief 视频流
    */
    cv::VideoCapture videoCap;
    /** @brief  图像
    */
    cv::Mat srcImg;
    /** @brief  相机刷新器
    */
    QTimer timer;

    Camera(const int cameraIndex, int buffer_size = 2);
    Camera();
    ~Camera();

    /** @brief  设置相机参数(图像尺寸、是否使用mJPG格式
    */
    void setParameters(cv::Size videoSize, int exposureTime = 100,
                       int fps = 60,
                       bool mjpg = true);
    /** @brief  获取所有相机
    */
    void getCamere();
#ifdef USE_OPENCV
    /** @brief  打开相机
    */
    bool open(int cameraIndex);
    /** @brief 打开相机
     */
    bool open();
#endif
    /** @brief  关闭相机
    */
    bool close(int cameraIndex);
    /** @brief  相机帧率控制
    */
    void start();
    /** @brief  暂停相机
    */
    void pause();

    /** @brief  相机暂停状态
    */
    void showPauseImg();
private:
    int index = 0;
    int fps = 0;        //相机帧率

    /** @brief  设置srcImg格式
    */
    void setSrcImg();
};

#endif // CAMERA_H
